{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 逻辑回归"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1、逻辑回归与线性回归的联系与区别   \n",
    "  \n",
    "2、逻辑回归的原理  \n",
    "  \n",
    "3、逻辑回归损失函数推导及优化  \n",
    "  \n",
    "4、正则化与模型评估指标  \n",
    "  \n",
    "5、逻辑回归的优缺点  \n",
    "  \n",
    "6、样本不均衡问题解决办法 \n",
    "  \n",
    "7、sklearn参数  \n",
    "  \n",
    "8、代码实现"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1、逻辑回归与线性回归的联系与区别 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "线性回归解决的是连续变量问题，那么在分类任务中可以用线性回归吗？例如判断是良性肿瘤还是恶性肿瘤，判断是垃圾邮件还是正常邮件，等等……"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "答案是也可以，但是效果不好，见下图："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src = \"https://img-blog.csdnimg.cn/20190830143654227.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RwZW5nd2FuZw==,size_16,color_FFFFFF,t_70\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "图显示了是否购买玩具和年龄之间的关系，可以用线性回归拟合成一条直线，将购买标注为1，不购买标注为0，拟合后取当0.5值为阈值来划分类别。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\\hat y = \\begin{cases}\n",
    "1,& f(x)>0.5\\\\\n",
    "0,& f(x)<0.5\n",
    "\\end{cases}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到，在途中，年龄的区分点约为19岁。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "但当数据点不平衡时，很容易影响到阈值，见以下图："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src = \"https://img-blog.csdnimg.cn/20190830143716479.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RwZW5nd2FuZw==,size_16,color_FFFFFF,t_70\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到，0值样本的年龄段往高年龄端偏移后，真实的阈值依然是19岁左右，但拟合出来的曲线的阈值往后边偏移了。可以想想，负样本越多，年龄大的人越多，偏移越严重。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可是这符合实际情况吗？实际情况是60岁的老人和80岁的老人都不会购买玩具，增加几位80岁的老人，并不会影响20岁以下人群购买玩具的概率。但因为拟合曲线原本的值域为$(-\\infty \\  \\infty)$而转换后的值域为[0,1]，阈值对变量偏移很敏感。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2、逻辑回归的原理 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "因此理想的替代函数应当预测分类为0或1的概率，当为1的概率大于0.5时，判断为1，当为1的概率小于0.5时，判断为0。因概率的值域为$[0,1]$，这样的设定比线性回归合理很多。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "常用的替代函数为Sigmoid函数，即："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\n",
    "h(z) = \\frac{1}{1+e^{-z}}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "其中，$z = \\theta^T x$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们可以看到，当z大于0时，函数大于0.5；当函数等于0时，函数等于0.5；函数小于0时，函数小于0.5。如果用函数表示目标分到某一类的概率，我们可以采用以下“单位阶跃函数”来判断数据的类别："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$h(z) = \\left\\{\n",
    "\\begin{aligned}\n",
    "0，& & z<0 \\\\\n",
    "0.5， & & z=0 \\\\\n",
    "1， & & z>0\n",
    "\\end{aligned}\n",
    "\\right.$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "若Z大于0，则判断为正例；若小于0，判断为反例；若等于0，可任意判别。由于Sigmoid函数单调且可导，函数在（0，1）之间程Z字型，可以很好的模拟二分类情况，因此很适合我们要解决的问题。  \n",
    "  \n",
    "接下来我们来推导逻辑回归函数的优化"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3、逻辑回归损失函数推导及优化"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\n",
    "P(y=1|x;\\theta) = h_\\theta (x) \\\\\n",
    "P(y=0|x;\\theta) = 1-h_\\theta (x)\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以写作一般公式，"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$P(y|x;\\theta)= h(x)^y (1-h(x))^{(1-y)}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "极大似然函数为，"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\n",
    "L(\\theta) = \\prod^{m}_{i=1}h_\\theta (x^{(i)})^{y^{(i)}} (1-h_\\theta (x^{(i)})^{(1-y^{(i)})}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对数极大似然函数为，"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$l(\\theta) = log L(\\theta) = \\sum^{m}_{i=1} y^{(i)}log h_\\theta (x^{(i)}) + (1-y^{(i)})log (1-h_\\theta (x^{(i)}))\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "损失函数为,"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\n",
    "J(\\theta) = -\\frac{1}{m}l(\\theta) = -\\frac{1}{m}\\sum^{m}_{i=1} y^{(i)}h_\\theta (x^{(i)}) + (1-y^{(i)})(1-h_\\theta (x^{(i)}))\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "损失函数表示了预测值和真实值之间的差异程度，预测值和真实值越接近，则损失函数越小。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 思考题：为什么不直接用和线性回归一样的平方损失函数？"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "*回答：如果和线性回归一样的平方损失函数，则损失函数的形式为$\\sum^m_{i=1}(y^{(i)}-\\frac{1}{1+e^{-\\theta^T x}})^2$，此为非凸函数，求解复杂，而且很容易求得局部最优解为非全局最优解。*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    " "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们用梯度下降法求解，"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\\theta:=\\theta-\\alpha\\Delta_\\theta J(\\theta) = \\theta + \\frac{\\alpha}{m}\\Delta_\\theta l(\\theta)$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "由于$g'_\\theta(z) = g_\\theta (z)(1-g_\\theta(z))$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<td bgcolor=#87CEEB>小练习：试证明，当$g(z) = \\frac{1}{1+e^{-z}}$</td>\n",
    "<td bgcolor=#87CEEB>$g'(z) = g(z)(1-g(z))$</td>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "证明："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\\begin{align*}\n",
    "g'(z) \n",
    "&= \\frac{-1}{(1+e^{-z})^2}(-e^{-z}) \\\\\n",
    "&= \\frac{e^{-z}}{(1+e^{-z})^2} \\\\\n",
    "&= \\frac{1}{1+e^{-z}} \\cdot \\frac{e^{-z}}{1+e^{-z}} \\\\\n",
    "&= g(z)(1-g(z))\n",
    "\\end{align*}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "因此可以求得，"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\\begin{align*}\n",
    "\\frac{\\partial J(\\theta)}{\\partial \\theta_i}\n",
    "&= \\frac{1}{m}\\sum^m_{i=1} y^{(i)}\\frac{1}{h_\\theta (x^{(i)})} h_\\theta (x^{(i)})(1-h_\\theta (x^{(i)}))x^{(i)} + (1-y^{(i)})\\frac{1}{1-h_\\theta (x^{(i)})}h_\\theta (x^{(i)})(h_\\theta (x^{(i)})-1)\\\\\n",
    "&= \\frac{1}{m}\\sum^m_{i=1}y^{(i)}(1-h_\\theta (x^{(i)}))x^{(i)}+(y^{(i)}-1)h_\\theta (x^{(i)})x^{(i)} \\\\\n",
    "& = \\frac{1}{m}\\sum^m_{i=1}(y^{(i)} - h_\\theta (x^{(i)}))x^{(i)}\n",
    "\\end{align*}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到，形式和线性回归很相似，这是因为他们都属于广义线性模型（GLM，可参考吴恩达-CS229 第四课）。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 逻辑回归的分布式实现"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "由于单机处理能力的限制，在对大规模样本训练时，往往需要将求解过程并行化。我们知道在求解过程中，行和列都存在批向量处理的情况，我们可以按行并行和按列并行。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 按行并行"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "看$\\frac{\\partial J(\\theta)}{\\partial \\theta_i} =\\frac{1}{m}\\sum^m_{i=1}(y^{(i)} - h_\\theta (x^{(i)}))x^{(i)}$，相当于将上个迭代步骤结果，将每个样本进行运算后求和，那么只需将样本拆分到不同机器上运算，最后在求和即可。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 按列并行"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$\\frac{\\partial J(\\theta)}{\\partial \\theta_i} =\\frac{1}{m}\\sum^m_{i=1}(y^{(i)} - h_\\theta (x^{(i)}))x^{(i)}$是对参数$\\theta_i$进行的运算，那么只需将特征分配到不同的机器上，分别计算梯度后，再归并到完整的特征向量进行梯度更新即可。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4、正则化与模型评估指标"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 正则化"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们可以在损失函数后面，加上正则化函数，即$\\theta$的惩罚项，来抑制过拟合问题。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### L1正则:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\n",
    "J(\\theta) =\\frac{1}{m}\\sum^{m}_{i=1} y^{(i)}h_\\theta (x^{(i)}) + (1-y^{(i)})(1-h_\\theta (x^{(i)})) + \\frac{\\lambda}{m\n",
    "}\\sum^m_{i=1}|\\theta_i|\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\n",
    "\\Delta_{\\theta_i} l(\\theta) = \\frac{1}{m}\\sum^m_{i=1}(y^{(i)} - h_\\theta (x^{(i)}))x^{(i)} + \\frac{\\lambda}{m}sgn(\\theta_i)\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "梯度下降法的迭代函数变为,"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\\theta:=\\theta-K'(\\theta)-\\frac{\\lambda}{m}sgn(\\theta)$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$K(\\theta)$为原来的损失函数，由于最后一项的符号由$\\theta$决定，可以看到，当$\\theta$大于零时，更新后的$\\theta$变小；当$\\theta$小于零时，更新后的$\\theta$变大。因此，L1正则化调整后的结果会更加稀疏（结果向量中有更多的0值）。（见图示，相当于在等高线上找令菱形最小的点。）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"1.png\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### L2正则"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\n",
    "J(\\theta) =\\frac{1}{m}\\sum^{m}_{i=1} y^{(i)}h_\\theta (x^{(i)}) + (1-y^{(i)})(1-h_\\theta (x^{(i)})) + \\frac{\\lambda}{2m}\\sum^m_{i=1}\\theta_i^2\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\n",
    "\\Delta_{\\theta_i} l(\\theta) = \\frac{1}{m}\\sum^m_{i=1}(y^{(i)} - h_\\theta (x^{(i)}))x^{(i)} + \\frac{\\lambda}{m}\\theta_i\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "梯度下降法的迭代函数变为,"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\\theta:=\\theta-K'(\\theta)-\\frac{2\\lambda}{m}\\theta$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$K(\\theta)$为原来的损失函数，最有一项的$\\lambda$决定了对参数的惩罚力度，惩罚力度越大，最后的结果向量的参数普遍较小且分散，避免了个别参数对整个函数起较大的影响。（见图示，相当于在等高线上找令圆形最小的点）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"2.png\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 逻辑回归的评价指标"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "由于逻辑回归模型属于分类模型，不能用线性回归的评价指标。\n",
    "二元分类的评价指标基本都适用于逻辑回归。\n",
    "观察以下混淆矩阵，"
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![image.png](attachment:image.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们可以用查准率和查全率来评价预测结果：\n",
    "* 查准率 $P =\\frac{TP}{TP+FP}$ \n",
    "* 查全率 $R =\\frac{TP}{TP+FN}$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们可以用P-R曲线表示查准率和查全率之间的关系："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "查准率和查全率经常相互矛盾，一般查准率高时查全率低，查全率高时查准率低。我们经常针对具体的应用场景决定更看重哪一个指标。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<td bgcolor=#87CEEB>小练习：试举例说明，在什么场景下，更看重查准率；在什么情况下，更看重查全率，并说明原因。</td>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src = \"https://ask.qcloudimg.com/http-save/developer-news/4b1eek0aoz.jpeg?imageView2/2/w/1620\"></img>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "P-R曲线越靠外，则预测效果越好，如果两条P-R曲线相交，则难说孰优孰率，可以计算曲线包住的面积。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们可以用$F_\\beta$表达对查准率/查全率的不同偏好，定义为："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$F_\\beta = \\frac{(1+\\beta^2) \\cdot P \\cdot R}{(\\beta^2 \\cdot P)+R}$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$\\beta$大于1时，查全率有更大影响；$\\beta$小于1时，查准率有更大影响；$\\beta$等于0时，即标准的F1度量。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "但是，当正负样本分布发生变化时，P-R曲线会受到较大影响。试想负样本的数量扩大10倍，FP和TN都会成倍增加，会影响到查准率和查全率。这时候我们可以用ROC曲线来评价模型。\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "定义：\n",
    "* $TPR = \\frac{TP}{TP+FN}$\n",
    "* $FPR = \\frac{FP}{TN+FP}$\n",
    "绘图的过程可以将样本的预测概率排序，将分类阈值从最小向最大移动，则每个阈值会得到一组TPR和FPR的位置点，将所有的点连结，则绘制成ROC曲线，同时，计算曲线下的面积，即AUC值。AUC值越大，则说明预测的效果越好。<br>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src = \"https://upload-images.jianshu.io/upload_images/11525720-dd2545eaaaa7c2ba.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp\" width = 500></img>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### AUC值的计算"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "计算方法一："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src = \"http://www.csuldw.com/assets/articleImg/roc_plot.gif\"></img>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上图很形象地描述了RUC的描绘过程，那么，计算AUC值也很直观了，每一组点的坐标,可以写成$(x_i,y_i)$，那么，"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$AUC = \\frac{1}{2}\\sum^{m-1}_{i=1}(x_{i+1}-x_i) \\cdot(y_i + y_{i+1})$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上式乘以二分之一的原因是，阈值变更时，上图正例和反例单个出现的，但当数据量增加，每个阈值同时存在多个正例和反例时，上升的轨迹可能是斜线，因此要计算梯形面积。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "计算方法二："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "任意给一个正样本和负样本，如果正样本的预测概率大于负样本，意味着以此正样本的预测概率为阈值，预测是成功的，则增加1分；如果两者相等，则增加0.5分。\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\n",
    "令 AUC_{ij} = \\left\\{\n",
    "\\begin{aligned}\n",
    "    1, & & if & &pos\\_score_i > neg\\_score_j \\\\\n",
    "    0.5, & & if & &pos\\_score_i = neg\\_score_j \\\\\n",
    "    0, & & if & &pos\\_score_i < neg\\_score_j\n",
    "\\end{aligned}\n",
    "\\right.$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "单个正样本对所有负样本的得分占全部负样本的比例为：$AUC_i = \\frac{1}{m^-}\\sum\n",
    "^{m^-}_{j=1}AUC_{ij}$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "如果一个正样本在ROC曲线上的坐标为$(x,y)$，x即排序在其之前的负样本所占的比例，即假正例率。那么，整条曲线的ROC值即 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\n",
    "AUC = \\frac{1}{m^+m^-}AUC_{ij} = \\frac{1}{m^+m^-}\\sum_{x^+\\in D^+} \\sum_{x^- \\in D^-}(\\mathbb{I}(f(x^+)<f(x^-)) + \\frac{1}{2}\\mathbb{I}(f(x^+)=f(x^-))\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<td bgcolor=#DB7093>方\n",
    " 法一是将每个预测概率预测正确的比例做积分，方法二是将每个正样本的预测概率大于负样本预测概率的比例做积分。</td>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<td bgcolor=#DB7093>我们可以把方法1理解为，将ROC曲线看作y = f(x)，求定积分$\\int_0^1f(x)dx$，方法2理解为，将RUC曲线看作是x = g(y),求$\\int_0^1g(y)dy$。</td>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5、逻辑回归的优缺点 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* 优点：从上面介绍已经可以额看到，逻辑回归的思想简洁，可以很好的解决二问题。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* 缺点：    \n",
    "  \n",
    "观察下图"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src = \"https://img-blog.csdnimg.cn/2019083014370448.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RwZW5nd2FuZw==,size_16,color_FFFFFF,t_70\"></img>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "因为预测结果呈Z字型（或反Z字型），因此当数据集中在中间区域时，对概率的变化会很敏感，可能使得预测结果缺乏区分度。 \n",
    "  \n",
    "第二，由于逻辑回归依然是线性划分，对于非线性的数据集适应性弱。     \n",
    "  \n",
    "第三，当特征空间很大，性能欠佳。 \n",
    "  \n",
    "第四，只能处理两分类问题。  \n",
    "  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 6、样本不均衡问题"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "每200封邮件里有1封垃圾邮件，当碰到一封新邮件时，我们只需将其预测为正常邮件，可以达到99.5%的准确率。但是这样的学习器毫无价值，因为他无法判断出任意一封垃圾邮件。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "我们预测时，实际上是用预测出的概率值与一个阈值进行比较，例如当y > 0.5时，判断为正例。$\\frac{y}{1-y}$表示了正例可能性和反例可能性的比值。阈值为0.5时，即$\\frac{y}{1-y}>1$时，预测为正例。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "如果令$m_+$为样本正例数，$m_-$为样本负例数，随机的观测几率为$\\frac{m_+}{m_-}$。只要分类器的预测概率高于观测几率，应判定为正例，即"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "$$\n",
    "\\frac{y}{1-y}>\\frac{m_+}{m_-}，预测为正例\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这时候，需要对预测值进行调整，使得$\\frac {y'}{1-y'}=\\frac{y}{1-y} \\cdot\\frac{m_+}{m_-}$，那么，0.5的阈值依然是合理的分类决策。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这就是类别不平衡的一个基本策略——“再缩放”。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "“再缩放”的三类做法：\n",
    "* 欠采样：去除一些反例使得正反例数目接近。\n",
    "* 过采样：增加一些正例使得正反例数目接近。\n",
    "* 阈值移动：基于原始集学习，当在预测是，将决策阈值改为符合样本正负样本比例的值。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以想到，过采样因为增加了数据，时间开销大于欠采样法。但欠采样法由于随机丢弃反例，可能丢失一些重要信息。这时候可以将反例划分成若干个集合分别学习，从全局来看并非丢失重要信息。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 7、sklearn参数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Logistics Regression参数名称\n",
    "\n",
    "#### 函数调用形式\n",
    "\n",
    "LogisticRegression(penalty='l2',dual=False,tol=1e-4,C=1.0,fit_intercept=True,intercept_scaling=1,class_weight=None,random_state=None,solver='liblinear',max_iter=100,multi_class='ovr',verbose=0,warm_start=False, n_jobs=1)\n",
    "\n",
    "#### penalty\n",
    "\n",
    "字符串型，’l1’ or ‘l2’，默认：’l2’；正则化类型。\n",
    "\n",
    "#### dual\n",
    "\n",
    "布尔型，默认：False。当样本数>特征数时，令dual=False；用于liblinear解决器中L2正则化。\n",
    "\n",
    "#### tol\n",
    "\n",
    "浮点型，默认：1e-4；迭代终止判断的误差范围。\n",
    "\n",
    "#### C\n",
    "\n",
    "浮点型，默认：1.0；其值等于正则化强度的倒数，为正的浮点数。数值越小表示正则化越强。\n",
    "\n",
    "#### fit_intercept\n",
    "\n",
    "布尔型，默认：True；指定是否应该向决策函数添加常量(即偏差或截距)。\n",
    "\n",
    "#### intercept_scaling\n",
    "\n",
    "浮点型，默认为1；仅仅当solver是”liblinear”时有用。\n",
    "\n",
    "#### class_weight\n",
    "\n",
    "默认为None；与“{class_label: weight}”形式中的类相关联的权重。如果不给，则所有的类的权重都应该是1。\n",
    "\n",
    "#### random_state\n",
    "\n",
    "整型，默认None；当“solver”==“sag”或“liblinear”时使用。在变换数据时使用的伪随机数生成器的种子。如果是整数, random_state为随机数生成器使用的种子;若为RandomState实例，则random_state为随机数生成器;如果没有，随机数生成器就是' np.random '使用的RandomState实例。\n",
    "\n",
    "#### solver\n",
    "\n",
    "{'newton-cg', 'lbfgs', 'liblinear', 'sag', 'saga'}，默认: 'liblinear'；用于优化问题的算法。\n",
    "\n",
    "对于小数据集来说，“liblinear”是个不错的选择，而“sag”和'saga'对于大型数据集会更快。\n",
    "\n",
    "对于多类问题，只有'newton-cg'， 'sag'， 'saga'和'lbfgs'可以处理多项损失;“liblinear”仅限于“one-versus-rest”分类。\n",
    "\n",
    "#### max_iter\n",
    "\n",
    "最大迭代次数，整型，默认是100；\n",
    "\n",
    "#### multi_class\n",
    "\n",
    "字符串型，{ovr'， 'multinomial'}，默认:'ovr'；如果选择的选项是“ovr”，那么一个二进制问题适合于每个标签，否则损失最小化就是整个概率分布的多项式损失。对liblinear solver无效。\n",
    "\n",
    "#### verbose\n",
    "\n",
    "整型，默认是0；对于liblinear和lbfgs solver，verbose可以设为任意正数。\n",
    "\n",
    "#### warm_start\n",
    "\n",
    "布尔型，默认为False；当设置为True时，重用前一个调用的解决方案以适合初始化。否则，只擦除前一个解决方案。对liblinear解码器无效。\n",
    "\n",
    "#### n_jobs\n",
    "\n",
    "整型，默认是1；如果multi_class='ovr' ，则为在类上并行时使用的CPU核数。无论是否指定了multi_class，当将' solver ' '设置为'liblinear'时，将忽略此参数。如果给定值为-1，则使用所有核。\n",
    "\n",
    "原文链接：https://blog.csdn.net/qq_38683692/article/details/82533460"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 8、代码实现"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 1、先尝试调用sklearn的线性回归模型训练数据，尝试以下代码，画图查看分类的结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "df_X = pd.read_csv('./logistic_x.txt', sep='\\ +',header=None, engine='python') #读取X值\n",
    "ys = pd.read_csv('./logistic_y.txt', sep='\\ +',header=None, engine='python') #读取y值\n",
    "ys = ys.astype(int)\n",
    "df_X['label'] = ys[0].values #将X按照y值的结果一一打标签\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7f20f7f56e80>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax = plt.axes()\n",
    "#在二维图中描绘X点所处位置，直观查看数据点的分布情况\n",
    "df_X.query('label == 0').plot.scatter(x=0, y=1, ax=ax, color='blue')\n",
    "df_X.query('label == 1').plot.scatter(x=0, y=1, ax=ax, color='red')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "#提取用于学习的数据\n",
    "Xs = df_X[[0, 1]].values\n",
    "Xs = np.hstack([np.ones((Xs.shape[0], 1)), Xs]) \n",
    "ys = df_X['label'].values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Coefficient: [[-1.70090714  0.55446484  1.07222372]]\n",
      "Score: 0.898989898989899\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/xiaoran/anaconda3/lib/python3.6/site-packages/sklearn/linear_model/logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
      "  FutureWarning)\n"
     ]
    }
   ],
   "source": [
    "from __future__ import print_function\n",
    "import numpy as np\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "\n",
    "lr = LogisticRegression(fit_intercept=False) #因为前面已经将截距项的值合并到变量中，此处参数设置不需要截距项\n",
    "lr.fit(Xs, ys) #拟合\n",
    "score = lr.score(Xs, ys) #结果评价\n",
    "print(\"Coefficient: %s\" % lr.coef_)\n",
    "print(\"Score: %s\" % score)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x7f20b721da58>]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax = plt.axes()\n",
    "\n",
    "df_X.query('label == 0').plot.scatter(x=0, y=1, ax=ax, color='blue')\n",
    "df_X.query('label == 1').plot.scatter(x=0, y=1, ax=ax, color='red')\n",
    "\n",
    "_xs = np.array([np.min(Xs[:,1]), np.max(Xs[:,1])])\n",
    "\n",
    "#将数据以二维图形式描点，并用学习得出的参数结果作为阈值，划分数据区域\n",
    "_ys = (lr.coef_[0][0] + lr.coef_[0][1] * _xs) / (- lr.coef_[0][2])\n",
    "plt.plot(_xs, _ys, lw=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2 用梯度下降法将相同的数据分类，画图和sklearn的结果相比较"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAEGCAYAAABsLkJ6AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO3deXxU53Xw8d8RSEgsAgNikwbk3SZ4AQ0O3m3Aju04xhuyaZOmLSluszRLs2G/b5K+Te1sTdx0SeI3uGkbm1rYeInjegHv8QIjsRuvCWIkFskGhNkXnf4xohZYy0iauc9z7z3fz0cfoWFm7pm5M/c8+yOqijHGmPgpcB2AMcYYNywBGGNMTFkCMMaYmLIEYIwxMWUJwBhjYqq/6wB6YuTIkVpZWek6DGOMCZXa2tp3VbXs2NtDlQAqKytJpVKuwzDGmFARkfqObrcmIGOMiSlLAMYYE1POE4CI9BORFSLyqOtYjDEmTpwnAOCLwHrXQRhjTNw4TQAiUgF8HPilyziMMSaOXNcA7gS+DrR2dgcRmSciKRFJNTc3BxeZMcZEnLMEICJXA02qWtvV/VT1LlVNqmqyrOxDw1iNMcb0kssawPnANSKyAfgvYLqI/NphPO40N8Py5ZnfxhgTEGcJQFXnq2qFqlYCNwNPq+onXcXjzMKFMGECXHZZ5vfCha4jMsbEhOs+gHhrboa5c2HvXmhpyfyeO9dqAsaYQHiRAFT1WVW92nUcgduwAYqKjr6tsDBzuzHG5JkXCSC2KivhwIGjbzt4MHO7McbkmSUAl8rKYMECKCmB0tLM7wULMrcbY0yehWo10EiaMwdmzsw0+1RW2sXfGBMYSwA+KCuzC78xJnDWBGSMMTFlCcAYY2LKEoAxxsSUJQBjjIkpSwDGGBNTlgCMMSamLAEYY0xMWQIwxpiYsgRgjDExZQnAGGNiyhKAMabnbBe7SLAEYIzpGdvFLjJcbgpfLCLLRGSViKwTkb91FYsxJku2i12kuKwB7Aemq+pZwNnAFSIyzWE8xpju2C52keJsOWhVVWBX25+FbT/qKh5jTBZsF7tIcdoHICL9RGQl0AQ8paqvdnCfeSKSEpFUs1UzjXHLdrGLFMkUxB0HITIMeBD4gqqu7ex+yWRSU6lUcIEZYzrW3Gy72IWIiNSqavLY273YEUxVd4jIM8AVQKcJwMSAXVjCwXaxiwSXo4DK2kr+iEgJcBnwuqt4jAdseGHXwj72PuzxR5DLPoCxwDMishpYTqYP4FGH8RiXbHhh18KeHMMef0R50QeQLesDiLDlyzMXh5aWD24rLYUlS2DqVHdx+aC5OXPR3Lv3g9tKSqC+PhzNMGGPPwI66wOwmcDGDza8sHNhH3sf9vgjzBKA8YMNL+xc2JNj2OOPMEsAxh9z5mSaBZYsyfyeM8d1RN0LomMz7Mkx7PFHmPUBGNNbCxdmOqqLijIl3AUL8pu0wj5ENuzxh1hnfQCWAIzpDevYNCFincDG5JJ1bJoIsARgTG9Yx6YbNpkspywBGNMb1rEZPJtMlnPWB2BMX1jHZjCsz6VPvF4MzpjQskXRgnGkz6V9AjjS52Lvf69ZE5CJJ2tLDhfrc8kLSwAmfqwtOXx863OJSAHC+gBMvFhbcrj50OcS9ATAHLB5AMaAjd8Pu7KyzOqwLkv+EVq23BKAiRdrSzZ9EbEChCUAEy++tSWbcIlYAcLllpAJEXlGRF4TkXUi8kVXsZiYCeOqo8YPEStAuJwHcAj4G1WtE5EhQK2IPKWqrzmMKb586FwLko3fN701Zw7MnBmJ74uzGoCqblbVurZ/vw+sB8pdxRNrNizSPxEZZhhZrjujc8SLPgARqQQmA6928H/zRCQlIqlm+zLkXsRGNUSCJWQTEOcJQEQGAw8AX1LVncf+v6repapJVU2WhTzbeilioxpCzxKyCZDTBCAihWQu/veo6uJ8Hutwa3gmvAUqYqMaQs8SsgmQy1FAAiwA1qvqj/N5rJ37DjLtjqV8++G1rG1syeehwidioxpCzxKyCZCzpSBE5ALgBWAN0Np2862q+lhnj+nLUhDpbXu4v7aB+2sbGFpSyE1TE8w6exzDBhZ1/+A4iNsoIJ8dWWqgsDBz8Q/BUgPGb7YncJvWVuV377xLTaqBZ19v4uJTy6hOJjj/pJH0K5AcRWpMH1lCNjlk+wG0KSgQLjy5jAtPLmPHngM8smoT33/8dbbvPsCNVRXMTiZIDB/oOkwTdzZPwQQgdjWAzqxtbOH+2gYeXtnI6WNLqU4muGLSGIoL++XleMbkhNUUoi1H59dWA+3GpPKhfOeaj/Dy/Bn80UfH80BdA9PuWMr/eWgNqxt2EKZEaWLC5gtEWwDn12oAXWjcsZcHahuoSaUZPKA/s5MJrptczvBB1nFsHLN9DaItx+fXagC9UD6shL+ecTLPf+1SvnX1RNY07ODiHz7DZ++p5Zk3mmxuQa7Z8gfZs/kCuefT5y+g82sJIAsFBcJ5J43kzpsn8+I3pnPeiSO586k3Of97T/PDJ15nw7u7XYcYftac0TM2XyC3fPv8BXR+rQmoD17fspOa5Q08tLKRk0cNpjqZ4MozxjCwKKKDq/LV4Rjh5oy89tHafIHc8PXzl8Pza01AeXDamFK+9YmJvDJ/Bn96XiW/Wb2Jc+94mvmL17Bi43a/Oo77Wr3NZwkpos0ZeS9U2r4GueHr5y+A82s1gBzb3LKXxXWN1KTSFPUroDqZ4Lop5YwcPMBdUH3dxDrfJaSgSmABDpn0tVBpOhCDk2U1gICMHVrC5y49iWe/egnfvXYS67fs5NIfPcst/5li6fqtHDrc2v2T5FIuVpfMdwkpiPWIAm7j9bVQmRc+dZ72RozXw7IaQADe33eQR1dvpiaVpnH7Xq6fUkF1soITygbn/+DLl2cuei3tFsErLc1UK6dOze45wl5Cd1DCy/qQYZ/I1dfapU86OxdhP0d0XgNAVUPzU1VVpXnT1KS6bFnmdx69uWWnfvfRdVr1d0/qjT/7nd63fKPu2ncwfwdsalItKVGFD35KSnr+Ou+9N/O40tLM73vvzU+8+bBsmerQoUe/B6WlmdvzqNu37Mgdhg4N7j3N5ec8V58tn7k4R3kApLSDa6rzi3pPfvKWAByc5AOHDuvjazfr3F8t0zO+/bh+bdFKTW14T1tbW3N/sFxdvANKkjnX2YXqtdfy/no6fctcXDxz/Tl3lFgDE6EE11kCsCYgDzqAtu7cx+K6Rhal0iBQnUxw/ZRyRg0pzt1BIlCN7ZNjh9TNnZtprnDVdJGLprmeyMfn3IPvTl4FfY7yyDqBO+NBb93o0mL+6pITWfo3F/ODG87k9827mPEPz/GZf1/Ok+u2cDAXHccR2cS619oPqautzVzwXW67GPRErnx8zqPeeRqDyXaWADw6ySJCsnI4P7jxLF6eP4PLJ47hrud/z7l3PM3tj63n7ab3A48pUo4kwV27nCf9rC6euRxdk6/PeZTnIkQ9weF4FJCI3A1cDTSp6qTu7p+3UUCez6h8p3kXNak0i+saSRxXQnUywcfPHMuQ4kLXoYWTT00XnTXN5WN0jeefc29FoPnUyx3BROQiYBfwH04TAITiJB883MpzbzRTk0rz8u/f4/KJY7hpaoKplceR2WLZZM3ni2E+E1QIPucm97zcEUxVnxeRSpcx/K8Q7MBU2K+AmRNHM3PiaJrf38+DKxq49cE1HDrcyuxkghumVDBmaA47jqNszhyYOdPPi+GR9vr2CeBIE1Vf42z3ObdcYJyPAmpLAI92VgMQkXnAPIDx48dX1dfXBxdcCKgqK9I7WJRK89vVm6macBw3TU0w/bTRFPW3Lp5QCqCJKkrzt0z3vGwCgu4TQHthnQkclD0HDvHYmi3UpNK807SLayeXU51McOqYIa5Di7beFKW7e0wem6h86gIxwbBhoDEwsKg/N1ZVUHPLudz/V+dRXFjAn9z9KrP+5Xfc82o9O/cddB1i9PRmjaFsHpPH0TUejHw2nrAaQA+Frd300OFWXnjrXWpSaV58+11mnj6a2ckKph0/goIC6zjuk94UpT0ofnsQggmYlzUAEVkIvAycKiINIjLXZTzd8W3ToGz071fApaeN4mefrOLZr17CpPKh/O0jr3HJj57ln5a+xaYde7t/EtOx3hSlPSh+x2B4u8mS8xpAT7isAUSp1KSqrG5ooSaV5tHVmzkrMYybkglmThzFgP79XIcXHiGtAbQPJUy1WdN7XtYAwsSDglvOiAhnJYbx99edwSvzZ3Dd5HH8+pV6zr3jab7zyDpe27TTdYjh0JuitEfF77ivDmKsBpA1jwpuebPxvT3cX5tmUW0DIwYXUZ1MMOuscoYOtBnHXcrHKCBjcsjbYaA94boT2MXkURfXicOtyotvZzqOn3+jmUtPG0V1MsF5J1rHsTFhZAkgR4K8IPswWWf77gM8vLKR+1IN7Nx7kNnJCm6sqqDiuIHBBmKM6TVLACFzpMlp0N5mKtnABirZXVLmrMlJVVm3aSc1qTSPrNrEpHFDmZ2s4GMfGUNxoXUcG+Mz6wQOmQ0bYA4LqWcCT3EZ9UzgJl3orNNZRJhUPpT/N2sSr8yfQfXUBItSDUy7YynfengtaxtbCFNhwvgj7HvKh5nVADz17vpmBk6cwEA+6HXeQwl7Xqtn5On+dBqmt+3hgboGFqUaKC0ppDpZwbVnl3PcoKLuH9wV6ySNBR+aOePAagAhM3LXBvqXHH0R7V9SyMhdG9wE1InE8IF8aeYpvPD1S7ntqtNZsXEHF/3gGT53bx3PvdnM4dZeFDDCOOMurvpQfG9uzlz8XW7MFneWAHxVWUkRR+/gVIS/29EVFAgXnDySn86ZzIvfmM6044fzoyfe4MLvP82Pn3yDje/tye6J7KoQHn1M1FGaWxNWlgB85dGEoZ4aOrCQT51byW++cAG//PRUdu47xLX/+jvm3PUKD65oYO+Bw50/2K4K/mpf2s9BovZoN9bYsgTgswjstzpxXCnfueYjvDx/Op+cNoGHVmxi2h1Lue3BNaxK7/hwx7FdFfx0bGn/F7/oc6Lucxkn173HMeyNtk5gE7hNO/byQG0DNbVpBhb2Z3aygusmlzNi8IDMHXzerjGOOpoGX1wMIjmZGt+r/v5c9x5HvDfa5gHETHMzrFiR+ffkyX62HLW2Kq/+YRuLUmmeWr+VC04aSXUywYUnj6T/tvdsFJAvli/PlPxbWj64rbQUvvY1uP324BN1rtdlicE6L17uCWzyY+FC+PSnM99JyBRqfvUr/wo0BQXCuSeO4NwTR7Bz30F+s2oTdy59i28uXs0NUyqoTk6kcuQg12Gazprlbrkl8xN0os71nsn53IPZc1YDiJjmZhg/HvbtO/r2jgo0vg61f2PL+9Sk0jy0opETRw2mOpngqjPGMLDIyivOTppPzXJWA+gxmwcQExs2QL8OVmYoKDi6f87nofanjhnC/716Ii/Pn8Gfn1/JY2s2M+32pXzzgdXUbdwe3xnH7U6aTpjAO99dGFx/pU8DEnI9Qi7EI+76ymkNQESuAP4R6Af8UlW/19X9rQbQvWxqAD4UeHpakN3Ssq9txnGa/v0KqE5WcN3kCsqGDMh3qH7o4KTtoYTTiuv5/t1l3jXvBSLXtSFfq8Q54F0NQET6Af8CXAlMBOaIyMR8HCtOo7vKyuDuuzM19SOKio4u0Lgeat+b2seYocV87tKTeOarl3D7dWfw5tZdTP+HZ5n3HymWvLaVQ4db8x+4Sx2ctIMUMnrfhmjNk+vJlzXXO9rEcIccZzUAETkX+I6qfqzt7/kAqnpHZ4/pTQ0g4qO7OtXVKCCXNYBcHvv9fQf57erN1KTSpLfv5fop5cyuSnDSqMG5DdoHndQAJlDPgdIylizJXLtCLa5f1gB4VwMAyoF0u78b2m47iojME5GUiKSae1jMifOqAmVlcPnlmZ9jL6wumzxzWfsYUlzIzeeMZ/Fnz2fhX3wUVbj5rle48WcvUbM8za79hzp9bOhqhW0nTUtKaKGUPZTw5yzgXcqiMU8uqC9r6E58fnnfCayqd6lqUlWTZT28Qrlu6vCZqz69fE30PWnUEG696nRenj+deRedwJOvbeXcO5bytUWrSG3YdlTHsc8d4F2aMwepr+eVv1vCacX1/HfpnOj0V/b1y5rNhT20Jz5/et0EJCJ/pqr/1usDB9AE5ENnp/mwoEYUNr2/jwfrGrkvlQaF2ckEl0wop+ojxaH/TESuv7IvX9Zsmo5ifjHI+UxgEdmoquP7EFB/4E1gBtAILAf+SFXXdfaYvvQB+DB82XwgyAuYqlK3cTs1yxt4dNVmdrw1nO11Cfa+MwpaCygtJRpt6D7K5kQfuU9dHXz5yz37smZ7Ye9sNnNMTnyvZgKLyOrO/gsY3ZeAVPWQiHweeILMMNC7u7r499acOTBzZsRKSxFQVhbcuRARqiYMp2rCcD577kQmX7OZ0qm/Z8TH1rBrXTmH3kxQWTkkmGDiJJuS+bH3+clPYMqU7L+s2c7i7WvbY+SqXBld1gBEZCvwMWD7sf8FvKSq4/IY24fYPACTC0euOQNG7qL/KQ2MmdbASeNKqE4muPrMsQwpLuz+SUzXsimZ56JZpifP0dvmgAiMTurtWkCPAoNVdWUHT/hsjmIzJlAf1AoHU1l5GscNP4Xn3mymJpXm9sfWc9nE0dyUTHDO8cMREdfhhlM2JfNcrMFzZEjbsRf2jh7fm+aA9qOTjsQ5dy6MGOHvKos9YGsBGdPOu7v289CKRu5bnubg4VZmJxPcMKWCMUOLXYcWLkHVANofLx9NNB31HQAMGgStraGpDdhy0Mb0gKqyMr2DmlQDj63ZzOTxw6hOJph5+miK+ns/etoP2TS5+D5Ko6Mk1V5IRhJZAjCml/YeOMx/r93MfcvTvN20i1lnl1M9tYLTxpS6Ds1/PRkF5GsH65EkVVAAu3cf/X8hGUlkCcCYHNjw7m7ur23g/toGRpUOoDqZ4BNnjWNoiXUcR9qRtVVmzTp6pUWrAQQnyATge6HEuHW4VXn+rWYWpdK88Na7zDhtFNXJBNNOGEFBgXUcR5bvTVadsATQAxEY9WUCtG33AR5a0UhNKs3uA4eYXZXghqoKyoeVuA7N5EMIS4eWALIUlhnj2X4GQ/hZDS1VZW3jTu5LbeTR1Zs5o3wo1ckEl39kNAP6d7BLjzEB8XE1UC+FYQG5bNe0srWvgiUinFExlO9eewavzJ/BjVUV/NfyjUy7fSnfeWQd6za1dP8kxgTIagDH8L0GkG18vr+OOElv28Oi2gbuT6U5blARN01NMOuscoYOjEHHsVVBvWA1gCwFtVZ+b5clz7aGEoaaTFwkhg/kK5edwgvfmM43rzyN5Ru2c8EPnuYLC1fwwlvNtLaGpxDWI1YF9Z7VADqRz4JLXzqZrQbQN74USHfsOcDDKzdRk0qzY89Bbqyq4MaqChLDB7oLKpfsA+gVqwH0UL62B+3rxkfZ1lBc7vrlK58KpMMGFvHp8yr57V9fyC8+VcWOPQe45p9f5I9/+QoPr2xk38HD7oLLhbBVQWO6U1jsawBBlwhztSy5k1FAvhSfeyEMBdJ9Bw/z1GtbqUmlWdPYwifOHEd1MsGk8tLwLUoXhjf8iBiM++6sBoCqhuanqqpKc+nee1VLSlSHDs38vvfenD59h5qaMseCD35KSjK3e60Hb1ZTk+qyZX69pmXLMqG3f99LSzO3+yi9bbfe+dSbev73lurHfvKcLnjh97pt137XYfXMkc9MaWlwX7CeCu0XsmeAlHZwTXV+Ue/JTy4TgMvzHobvxVF68Ga5SKrZCOv3/PDhVv3dW836xYV1Ounbj+tnf12rz7y+VQ8dbnUdWnZ8LA20F7aSQS91lgCc9AGIyGwRWScirSLy4WpJAFw2UbrakL3Xsnyz+tq/kU9h7RMpKBDOO2kkd948mRe/MZ1pJ47gx0+9yQXff5ofPfEG9e/t7v5JXMpXZ1qu9HWnsJDrbkOYfFkLXA/8wtHxnZ/3ILdE7LMs36xc7O+RTy62B81lt8nQkkI+NW0Cn5o2gfWbd1KTSnPdv77EKaMHU51McOWksZQU2YzjHunJhjLthbg/7CgdVQuC+gGeBZLZ3j9ffQChaYpxKYs3K6zNLPkSRHPYvoOH9LerN+mn735Vz/zOEzp/8WpdsXG7traGpInIFz1pqvK1nbMLdNIE5HQUUNu2kl9V1U6H9ojIPGAewPjx46vq6+tzGkNUEnkgsnizQrpYYs65GASzuWUvi+syi9IN6F9AdTLBtZPLGTl4QH4OGEdhGt3UTuCLwYnIEmBMB/91m6o+3HafZ+kmAbRn+wGEgyXV3A337Y3WVmXZhm3UpNI89dpWzj9xJNVTK7jo5DL697OpP33i8sT2QW83he81VZ2Zr+c2fgtV/0aeuOxjKigQpp0wgmknjGDnvoM8umozP136Nt98YA03VFVQnUxw/MhB+Q8kilx3HuaYFQeMyQNfRh2VFhfyRx8dz0OfO59ff+ajHDrcyuyfv0T1z19mUSrN7v2Hgg0o7Hw5sTnipA9ARK4D/gkoA3YAK1X1Y909zpqATNj42Bx24FArT7/exKJUmuUbtnHVGWOZnUwwZfyw8M04dsXHE9sF2xDGGPMhW3fuY3FdI4tSaUSgOpnguinljBpS7Do0k0OWAHKgL0k/ZAUGEzOqSqp+OzXL0zy+bgvTThhBdTLBJaeWUWgdx6Fnq4H2UV9WkvRpFUpjOiIiTK0czg9nn8XL82dw2emj+flz73De957mjsfW83bTLtchmjywGkAW+jL0N6TDho0B4O2mXSyqTbO4rpHxwwdSnazg42eOY/AAV4sImN6wGkAf9GXdoLAti25MeyeNGsz8K0/npW9O5y8vPpEl65s4946lfHXRKpb9YRthKkCaD7M0noXKSti//+jbsh36G7Fhw8Zz+eprKuxXwGUTR3PZxNE0vb+Ph1Y0Mn/xaloVZicruGFKBaNLreM4bKwGkIUlS6C19YO/CwuzH/obsWHDoRDTzZ0C62saNaSYeRedyJKvXMyPZp/Fxvf2cNmPn2Pur5bz+NotHDjU2v2TGC9YH0A3ctWGb6OAghGDzZ065Lqvac+BQzy2Zgs1qTS/b97FtWeXUz01wSmjh+T/4KZbgS8FERW5WuI4qOUR8pVogkxgvT1W+/0IjpyvuXMzS0BHPem6Xop7YFF/bqyq4OLxFby8Zjd1O9J8asGrjBlawk3JBFefNZbS4sL8B2J6xJqAuhGmNvx8NQEEOYy1L8eKc4e7D5/TI+fuT64fxA8+eRpfqJzOl2aczPNvNnP+957mK/et5OV33rOOY49YE1AWwrDEcb6aAIJsWujrsVw3g7jm8nPa3Xv/3q79PLgis1T1/kOtzK6q4IaqCsYOLQkmwJizYaB9EIYtHPNV+g2yVN3XY8W9w93l57S7czdi8AA+c+EJPPGli/jpzZPZ1LKPK+58gU/fvYzH1mxm/6HDwQXrCw9GK1gNICKsBnD081iHe7B6c+72HjjM4+s2U7O8gTe2vs+ss8dRnUxw+tjSYIJ2KeDRClYDiLh8lX6DLFX35lgdFaJ834c8inpz7kqK+nHd5AoWzpvGg589j8ED+vPnv1rOJ/7pRf7zlXpa9h4M7gUEqf1ohZaWzO+5c53UBKwGEDE+jwLK9jmyvV9ch3z6rK+fk8Otyotvv0tNKs3zbzYz/bRRVCcTnHvCCAoKIrJUtYNdxWw10BywpoXey/XFussmB+xERcH23Qd4aGUj9y1Ps2v/IWZXJbgxWUH5sJB3HDsYrWBNQH1kK3r2Xj5qvJ11Ou78hZ2oqDhuUBF/dv7x/PcXL+Tnn6zi3V37+fhPX+BTC17lkVWb2HcwpB3HHo1WcLUj2A+BTwAHgHeAP1PVHd09LoyrgZr81Hg7OieJ4mbqZQJiJyqy9h08zBPrtrAo1cC6TS1cc9Y4ZicTTCof6jq0nguwScG3GsBTwCRVPRN4E5jvKI6sxHmCUS7kY5JSR4Wo/3/bBsROVKQVF/Zj1tnl/PozH+WRz1/AsIFF3PKftVz1jy/w7y9tYMeeA90/iS88GK3gvA+gbX/gG1X1j7u7r9UAuudrP0W+Jikd9XoJ0YkyOdPaqrz0znvUpNI880YTF59SRnUywfknjaRfVDqO+8jbTmAR+Q1wn6r+upP/nwfMAxg/fnxVfX19kOH9rzDMBvZ9VEwgySnHJ8rXhBoKDt68lj0HeXhVZsbx9t0HuaGqgtlVFSSGDwzk+L4KPAGIyBJgTAf/dZuqPtx2n9uAJHC9ZhGIjQLqXDa1FJ/jz6kcvVDfE6rXPHjz1m1qYVGqgYdXNnL62FKqkwmumDSG4sJ+gcbhA+9qACLyp8AtwAxV3ZPNY1wnAJ9119HqwfcxVMLU7Ocdz968fQcPs2T9VmpSDaxu2MHVZ46lOpngjPKhiMSjicir5aBF5Arg68DF2V78Tde66miN8zLJveV6eeVQ8+zNKy7sx9VnjuPqM8exacdeHqht4HP31jGoqD+zkwmum1zO8EFF3T9RBLkaBfTPwBDgKRFZKSI/dxRHZHQ1tNhGMfWcD8srh5bHb964YSV8YcbJPPfVS/nWJyaytrGFi3/4DJ+9p5Zn3mjicGt4JsbmgvNO4J6wJqDuddT87VmNPDTC0PHvrRC9eS17D/KbVZtYlEqzded+bqyq4MaqCipHDnIdWs541wfQG5YAei9E30evxKbjPB9C+Oa9vmUni1INPLSikZNGDaY6meDKM8YwsCjcmydaAjBh/D5Gir3/4XHgUCtL12+lJpWmbuMOrjpjLNXJCs5ODAtlx7ElgB6yL6vJJRuFFV5bWvbxQF0Di1JpCvsVUJ1McN2UckYOHuA6tKxZAuiBqH1ZLZm5ZX0w0aCqLPvDNmpSDTz52hbOO3EE1ckEF59SRv9+fq+raQkgS1H7skYtmYWRg+XfTZ69v+8gv129mZpUmobte7l+SgXVyQpOKBvsOrQO+bYYnLeiNGTSo42HYs3jUZGml4YUF3LzOeNZ/NnzueczH6VVlepfvMLsn79ETSrN7v2HXIeYFUsAx4jSlzVKySzMPFr+3eTByaOHcOtVp61ol34AAAlwSURBVPPy/On8xYUn8OS6LZx7x1K+cf9qauu34XMrizUBdSAqQyaj1pwVdtYXEx9NO/exeEVmUTqA6mSC66eUM2pIsZN4rA+gh6LyZY1KMjMmjFSVuo3buW95msfXbuGc44dTnUxw6WmjKAyw49gSQIy5SGZRSaBxZucwt3bvP8Rv12xmUSrNH97dw/VTyqlOVnDSqCF5P7YlABMYG3kUfnYO8+ud5l0sSjXwQF0DieNKqE4m+PiZYxlSXJiX41kCiBhfS2fW7xB+dg6Dc+hwK8+92UxNKs1L77zH5RPHcNPUBFMrj8vpjGOvloM2feNz6cz1SsCuEqOvCbk3XJ/DOOnfr4AZp49mxumjaX5/Pw+taOTWB9dw6HArs5MJbphSwZih+es4tmGgIeP72H6Xw2gXLsyUXC+7LPN74cL8H9PlcfMlSkOhw6RsyAD+4qITeOrLF/GTm86mYfseLv/Jc7zd9H7ejmkJIGR8H9vvasy7q8Toe0LujbDPW2huzsy+Dus5EBEmjz+OO64/k1duncGJeZxdbAkgZMJQOpszJ9NevGRJ5ncQzVOuEqPvCbm3XJzDXIhabWxgUf+8rj7qJAGIyN+JyOq23cCeFJFxLuIIo7CUzsrKMuvcBBWXq8QYhoTcW0Gfw76KYm0s31zVAH6oqmeq6tnAo8C3HMURSr6WzlxWvQNPjG0vtozmUCTkOIhqbSyfnIwCUtWd7f4cBIRnLKonysr8usj4MDJpzpzMRvd5H41zzIuds2ABM+vnRGYUUFhFuTaWL87mAYjI3wN/ArQAl6pqh+VGEZkHzAMYP358VX19fXBBmqzEatx4rF5s+NjSJx0LfDloEVkiIms7+JkFoKq3qWoCuAf4fGfPo6p3qWpSVZNl9gXzUqyq3rF6seHja/Oor/LWBKSqM7O86z3AY8C38xWLya9YVb1j9WLDybfmUZ+5GgV0crs/ZwGvu4jD5EZYRiblRKxerIk6J30AIvIAcCrQCtQDf6mqjd09ztYC8luUlkPoVqxerAk7r9YCUtUbXBzX5Fesqt6xerEmqmwmsDHGxJQlAGNCJuxr3Rh/WAIwJkSittaNccsSgPFS2Eq5QcRra92YXLMEYLwTtlJuUPHaHDSTa7YlpPFK2FZaCDLesL03xh+BLwVhTG+ErZQbZLw2B83kmu0JbLwStpUWgo43sBVPTSxYDcB459Zbobg4HKVcF6XysG3UYvxlNQDjjfbL7IvA174Gt9zi/4XOSuUmrKwT2HjBOjiNyR/rBDZeC1vnrzFRYAnAeCFsnb/GRIElAOMFG+JoTPCsE9h4wzpTjQmWJQDjFVtm35jgOG0CEpG/EREVkZEu4zDGmDhylgBEJAFcDmx0FYMJXthW+TQmylzWAH4CfB0Iz0QE0ydhW+XTmKhzkgBEZBbQqKqrsrjvPBFJiUiq2YqNoWVr2Rvjn7x1AovIEmBMB/91G3ArmeafbqnqXcBdkJkJnLMATaCOTPRqP9P3yEQv6/Q1xo28JQBVndnR7SJyBnA8sEpEACqAOhE5R1W35Cse45ZN9DLGP4E3AanqGlUdpaqVqloJNABT7OIfbTbRyxj/2DwAExib6GWMX5wngLZagIkJm+hljD9sLSBjjIkpSwDGGBNTlgCMMSamLAEYY0xMWQIwxpiYCtWewCLSDNS7jgMYCbzrOogsWJy5F5ZYLc7cC0usHcU5QVU/NP4uVAnAFyKS6miDZd9YnLkXllgtztwLS6w9idOagIwxJqYsARhjTExZAuidu1wHkCWLM/fCEqvFmXthiTXrOK0PwBhjYspqAMYYE1OWAIwxJqYsAfSAiNwtIk0istZ1LF0RkYSIPCMir4nIOhH5ouuYOiIixSKyTERWtcX5t65j6oqI9BORFSLyqOtYuiIiG0RkjYisFJGU63g6IyLDROR+EXldRNaLyLmuYzqWiJza9j4e+dkpIl9yHVdnROTLbd+ltSKyUESKu7y/9QFkT0QuAnYB/6Gqk1zH0xkRGQuMVdU6ERkC1ALXquprjkM7imS2hBukqrtEpBB4Efiiqr7iOLQOichXgCRQqqpXu46nMyKyAUiqqteTlkTk34EXVPWXIlIEDFTVHa7j6oyI9AMagY+qqg8TUo8iIuVkvkMTVXWviNQAj6nqrzp7jNUAekBVnwe2uY6jO6q6WVXr2v79PrAeKHcb1Ydpxq62PwvbfrwskYhIBfBx4JeuY4kCERkKXAQsAFDVAz5f/NvMAN7x8eLfTn+gRET6AwOBTV3d2RJAxIlIJTAZeNVtJB1ra1ZZCTQBT6mql3ECdwJfB1pdB5IFBZ4UkVoRmec6mE4cDzQD/9bWrPZLERnkOqhu3AwsdB1EZ1S1EfgRsBHYDLSo6pNdPcYSQISJyGDgAeBLqrrTdTwdUdXDqno2UAGcIyLeNa2JyNVAk6rWuo4lSxeo6hTgSuBzbU2XvukPTAF+pqqTgd3AN92G1Lm2JqprgEWuY+mMiBwHzCKTXMcBg0Tkk109xhJARLW1qT8A3KOqi13H05226v8zwBWuY+nA+cA1bW3r/wVMF5Ffuw2pc20lQVS1CXgQOMdtRB1qABra1fjuJ5MQfHUlUKeqW10H0oWZwB9UtVlVDwKLgfO6eoAlgAhq61xdAKxX1R+7jqczIlImIsPa/l0CXAa87jaqD1PV+apa0bZ/9c3A06raZcnKFREZ1NbxT1uTyuWAd6PWVHULkBaRU9tumgF4NUjhGHPwuPmnzUZgmogMbLsGzCDT/9cpSwA9ICILgZeBU0WkQUTmuo6pE+cDnyJTUj0yfO0q10F1YCzwjIisBpaT6QPweohlCIwGXhSRVcAy4Leq+rjjmDrzBeCetvN/NnC743g61JZILyNTovZWW23qfqAOWEPm+t7lshA2DNQYY2LKagDGGBNTlgCMMSamLAEYY0xMWQIwxpiYsgRgjDExZQnAmD4SkStE5A0ReVtEvJ3NasyxbBioMX3QtkLkm2TGiTeQmc8wx7eVV43piNUAjOmbc4C3VfX3qnqAzFIRsxzHZExWLAEY0zflQLrd3w14uPS2MR2xBGCMMTFlCcCYvmkEEu3+rmi7zRjvWQIwpm+WAyeLyPFta8bfDDziOCZjstLfdQDGhJmqHhKRzwNPAP2Au1V1neOwjMmKDQM1xpiYsiYgY4yJKUsAxhgTU5YAjDEmpiwBGGNMTFkCMMaYmLIEYIwxMWUJwBhjYup/AH1ohJQaRb5nAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "class LGR_GD():\n",
    "    def __init__(self):\n",
    "        self.w = None \n",
    "        self.n_iters = None\n",
    "    def fit(self,X,y,alpha=0.03,loss = 1e-10): # 设定步长为0.002，判断是否收敛的条件为1e-10\n",
    "        y = y.reshape(-1,1) #重塑y值的维度以便矩阵运算\n",
    "        [m,d] = np.shape(X) #自变量的维度\n",
    "        self.w = np.zeros((1,d)) #将参数的初始值定为0\n",
    "        tol = 1e5\n",
    "        self.n_iters = 0\n",
    "        #============================= show me your code =======================\n",
    "        while tol > loss: #设置收敛条件\n",
    "            \n",
    "            self.n_iters += 1 #更新迭代次数\n",
    "         #============================= show me your code =======================\n",
    "    def predict(self, X):\n",
    "        # 用已经拟合的参数值预测新自变量\n",
    "        y_pred = X.dot(self.w)\n",
    "        return y_pred  \n",
    "\n",
    "if __name__ == \"__main__\":\n",
    "    lr_gd = LGR_GD()\n",
    "    lr_gd.fit(Xs,ys)\n",
    "\n",
    "    ax = plt.axes()\n",
    "\n",
    "    df_X.query('label == 0').plot.scatter(x=0, y=1, ax=ax, color='blue')\n",
    "    df_X.query('label == 1').plot.scatter(x=0, y=1, ax=ax, color='red')\n",
    "\n",
    "    _xs = np.array([np.min(Xs[:,1]), np.max(Xs[:,1])])\n",
    "    _ys = (lr_gd.w[0][0] + lr_gd.w[0][1] * _xs) / (- lr_gd.w[0][2])\n",
    "    plt.plot(_xs, _ys, lw=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 3 用牛顿法实现结果，画图和sklearn的结果相比较，并比较牛顿法和梯度下降法迭代收敛的次数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "class LGR_NT():\n",
    "    def __init__(self):\n",
    "        self.w = None\n",
    "        self.n_iters = None\n",
    "    def fit(self,X,y,loss = 1e-10): # 判断是否收敛的条件为1e-10\n",
    "        y = y.reshape(-1,1) #重塑y值的维度以便矩阵运算\n",
    "        [m,d] = np.shape(X) #自变量的维度\n",
    "        self.w = np.zeros((1,d)) #将参数的初始值定为0\n",
    "        tol = 1e5\n",
    "        n_iters =0\n",
    "        Hessian = np.zeros((d,d))\n",
    "        #============================= show me your code =======================\n",
    "        while tol > loss:\n",
    "            \n",
    "            n_iters += 1\n",
    "        #============================= show me your code =======================\n",
    "        self.w = theta\n",
    "        self.n_iters = n_iters\n",
    "        \n",
    "    def predict(self, X):\n",
    "        # 用已经拟合的参数值预测新自变量\n",
    "        y_pred = X.dot(self.w)\n",
    "        return y_pred  \n",
    "\n",
    "if __name__ == \"__main__\":\n",
    "    lgr_nt = LGR_NT()\n",
    "    lgr_nt.fit(Xs,ys)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 比较梯度下降法和牛顿法收敛速度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "梯度下降法结果参数：[[-2.62051144  0.7603715   1.17194673]];梯度下降法迭代次数：32590\n",
      "牛顿法结果参数：[[-2.6205116   0.76037154  1.17194674]];牛顿法迭代次数：47\n"
     ]
    }
   ],
   "source": [
    "print(\"梯度下降法结果参数：%s;梯度下降法迭代次数：%s\" %(lgr_gd.w,lgr_gd.n_iters))\n",
    "print(\"牛顿法结果参数：%s;牛顿法迭代次数：%s\" %(lgr_nt.w,lgr_nt.n_iters))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以，看到，牛顿法的收敛速度比梯度下降法快很多。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 参考："
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "吴恩达 CS229课程"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "周志华 《机器学习》"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "https://blog.csdn.net/dpengwang/article/details/100159369"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "https://blog.csdn.net/u014106644/article/details/83660226"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "https://blog.csdn.net/abcjennifer/article/details/7716281"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "https://blog.csdn.net/portfloat/article/details/79200695\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "https://cloud.tencent.com/developer/news/319664"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "https://www.jianshu.com/p/2ca96fce7e81"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "https://blog.csdn.net/yoggieCDA/article/details/88953206"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "https://blog.csdn.net/ustbclearwang/article/details/81235892"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "https://blog.csdn.net/qq_38683692/article/details/82533460"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "http://www.csuldw.com/2016/03/12/2016-03-12-performance-evaluation/\n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "https://blog.csdn.net/u012162613/article/details/44261657"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "https://blog.csdn.net/qq_32742009/article/details/81839071"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
